// 引入 Node.js 的 path 模块，用于处理和转换文件路径
const path = require('path');
// 引入 Rollup 的 JSON 插件，用于处理 JSON 文件
const json = require('@rollup/plugin-json');
// 引入 Rollup 的 Babel 插件，用于将 ES6+ 代码转换为向后兼容的版本
const { babel } = require('@rollup/plugin-babel');

// 定义一个辅助函数，用于解析文件路径，将传入的相对路径转换为绝对路径
const resolveFile = (filePath) => path.join(__dirname, filePath);

// 定义 Rollup 插件数组
const plugins = [
  // 配置 JSON 插件，将 JSON 文件转换为 ES6 模块，compact 选项设置为 true 表示生成紧凑的 JSON 输出
  json({
    compact: true,
  }),
  // 配置 Babel 插件
  babel({
    // 指定需要处理的文件扩展名
    extensions: ['.js', '.ts'],
    // 设置 Babel 辅助函数的注入方式为 bundled，将辅助函数打包到输出文件中
    babelHelpers: 'bundled',
    // 配置 Babel 预设
    presets: [
      [
        // 使用 @babel/env 预设，该预设根据目标环境自动转换代码
        '@babel/env',
        {
          // 配置目标浏览器环境，这里表示支持市场份额超过 1%、最近两个版本的浏览器，且不包括 IE 8 及以下版本
          targets: {
            browsers: ['> 1%', 'last 2 versions', 'not ie <= 8'],
          },
        },
      ],
    ],
  }),
];

// 导出一个数组，数组中的每个对象代表一个打包配置
module.exports = [
  {
    // 使用上面定义的插件数组
    plugins,
    // 指定入口文件的路径，使用 resolveFile 函数解析路径
    input: resolveFile('../src/webEyeSDK.js'),
    // 配置输出选项
    output: {
      // 指定输出文件的路径
      file: resolveFile('./dist/monitor.js'),
      // 指定输出格式为 IIFE（立即调用函数表达式），适用于浏览器环境
      format: 'iife',
      // 指定全局变量名，当使用 IIFE 格式时，模块会挂载到该全局变量上
      name: 'monitor',
      // 生成 source map 文件，方便调试
      sourcemap: false,
    },
  },
  {
    plugins,
    input: resolveFile('../src/webEyeSDK.js'),
    output: {
      file: resolveFile('./dist/monitor.esm.js'),
      // 指定输出格式为 ES 模块，适用于现代浏览器和 Node.js
      format: 'esm',
      name: 'monitor',
      sourcemap: true,
    },
  },
  {
    plugins,
    input: resolveFile('../src/webEyeSDK.js'),
    output: {
      file: resolveFile('./dist/monitor.cjs.js'),
      // 指定输出格式为 CommonJS 模块，适用于 Node.js 环境
      format: 'cjs',
      name: 'monitor',
      sourcemap: true,
    },
  },
];
